package br.com.bmb.monitorimoveis.servico.impl;

import java.util.List;

import org.hibernate.service.spi.ServiceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import br.com.bmb.monitorimoveis.entidade.Cidade;
import br.com.bmb.monitorimoveis.entidade.Estado;
import br.com.bmb.monitorimoveis.persistencia.IAbstractDAO;
import br.com.bmb.monitorimoveis.persistencia.ICidadeDAO;
import br.com.bmb.monitorimoveis.servico.ICidadeService;
import br.com.bmb.monitorimoveis.servico.IEstadoService;

@Service
public class CidadeService extends AbstractService<Cidade, Long> implements ICidadeService {

	@Autowired
	private ICidadeDAO dao;
	
	@Autowired
	private IEstadoService estadoService;
	
	
	@Override
	@Transactional
	public Cidade inserir(Cidade cidade)  {		 
		Estado estado = null;
		if((estado = estadoService.getById(cidade.getEstado().getSigla())) == null)
			estadoService.inserir(cidade.getEstado());
		else
			cidade.setEstado(estado);
		return dao.inserir(cidade);		
	}		


	@Transactional
	public List<Cidade> pesquisarPorNome(String nomeCidade) {
		return dao.pesquisarPorNome(nomeCidade);
	}

	@Transactional
	public List<Cidade> pesquisarPorNomeExbicao(String nomeCidadeExibicao) {
		return dao.pesquisarPorNomeExbicao(nomeCidadeExibicao);
	}

	@Transactional
	public List<Cidade> pesquisarPorEstado(Estado estado) {
		return dao.pesquisarPorEstado(estado);
	}
	
	public Cidade getCidadeCadastrada(Cidade cidade){
		List<Cidade> cidades = this.pesquisarPorNome(cidade.getNome());
		for (Cidade c : cidades)
			if (c.equals(cidade))				
				return c;					
		return null;
	}

	@Override
	protected IAbstractDAO<Cidade, Long> getDAO() {
		return dao;
	}
	
	

	
}
